专利摘要:
意の宣言型表示の関数として非同期メソッドおよび呼び出しが自動で作り出される。非同期属性で注釈付けされたメソッドまたは特別な非同期関数を含むメソッド呼び出しを識別することができる。その後に、識別された同期メソッドまたは呼び出しの非同期バージョンが自動で作成される。意を指定するためのアシスタンスも提供される。
公开号:JP2011515741A
申请号:JP2010549690
申请日:2009-01-30
公开日:2011-05-19
发明作者:バン;ゴッホ ジェフリー;ウェズレイ;ダイアー ジョン;バン;ベルゼン ダニー;エー.マノレスク ドラゴス;カンタムネニ ハリシュ;ベックマン ブライアン;リフシツ ベンジャミン;ヨハネス;マリア;メイエル ヘンリクス
申请人:マイクロソフト コーポレーション;
IPC主号:G06F9-44
专利说明:

[0001] 本発明は、非同期メソッドのための宣言型サポート(declarative support)に関する。]
背景技術

[0002] コンピュータプログラムは、コンピュータまたは他のプロセッサベースのデバイスによって行われる動作を記述する一群の命令である。コンピュータプログラムがコンピュータハードウェア上で読み込まれて実行される時、コンピュータは、そのコンピュータプログラムの命令に従うことによってあらかじめ決められた方法で動く。従って、コンピュータは、命令によって規定されたタスクを行う専用のマシンになる。]
[0003] 1または複数のプログラミング言語を用いるプログラマーは、コンピュータプログラムを備える命令を生成する。典型的には、ソースコードは、プログラマーが手動および/または統合開発環境(IDE:integrated development environment)を使用して指定または編集される。その後、そのソースコードを、コンピュータまたは同様のデバイスによって実行可能なコンピュータ命令に、別のプログラムによってコンパイルまたは変換することができる。]
[0004] 例えば、プログラマーは、ハイレベルなオブジェクト指向のプログラミング言語(例えば、C#、C++、VB、Java等)を使用して実装されるコードを選択できる。関連するコンパイラを使用して、次に、特定のマシンの実行コードを作り出すことができる。あるいは、そのコードをターゲットの仮想マシンの中間言語(IL:intermediate language)コードに変換して、さらにその中間言語のコンパイルまたはインタプリテーションを介して複数のコンピュータプラットフォーム上での実行を容易にすることができる。]
[0005] メソッドは、ほとんどのプログラミング言語において重要なプログラム機構である。或るシナリオにおいて関数(function)とも呼ばれるメソッドは、独立した、再利用可能な関数機能のパッケージである。それは、行われる具体的なタスクまたはルーチンを指定する。オブジェクト指向のパラダイムにおいて、メソッドは、具体的なクラスの動きまたは能力を記述する。例えば、犬のクラスは、吠えるメソッドを有することができる。]
[0006] ほとんどのメソッドは、標準的には同期する。メソッドの相互作用は、発呼者(caller)/被呼者(callee)のパターンに従い、発呼者は、被呼者によって提供される関数機能を呼び出す。この場合、発呼者は、被呼者に呼び出しを行って、被呼者は、或る計算を行って、次に、その計算結果を発呼者に戻す。発呼者は、被呼者が或る計算を行う間は遮断する。しかしながら、これは、例えば、ネットワークまたはディスクと関連付けられた計算の過密さまたは待ち時間に起因して、計算を行う時間が比較的長くかかる場合に問題となる。非同期メソッドを使用してこのような問題に対処することができる。]
[0007] 非同期メソッドは、計算が行われる間でも遮断しない。発呼者は単に継続し、被呼者は開始する。いったん被呼者が終了すると、再度同期するための機構が発呼者と被呼者とに用いられる。例えば、被呼者は、発呼者を呼び戻すことができる。言い換えれば、発呼者が被呼者を呼び出し、発呼者が遮断かつ待機する非対称的な呼び出しではなく、発呼者が被呼者を呼び出して、被呼者が結果を用いて発呼者を呼び戻す。とりわけ、これによって、発呼者は典型的には遮断しないのでかなり迅速なプログラムの仕様が可能になる。]
[0008] 非同期メソッドを指定するために、プログラマーが必要なものに、非同期性を導入(inject)するための多数のプラミングコード(plumbing code)が含まれる。一標準的実施形態において、これは、「開始呼び出し(BeginInvoke)」と「終了呼び出し(EndInvoke)」とのメソッドの委譲(delegate)および定義の生成に対応する。ここで、「開始呼び出し」は非同期動作を開始して、「終了呼び出し」は結果を得る。非同期メソッドを、この設計パターンを使用したさまざまな方法において指定することができる。例えば、非同期動作の開始後、「終了呼び出し」を、結果を得るために直接呼び出すまたは呼び戻し関数によって間接的に呼び出すことができる。]
発明が解決しようとする課題

[0009] 本発明は、上述したような問題に鑑みてなされたものであり、その目的するところは、非同期メソッドのための宣言型サポートを提供することにある。]
課題を解決するための手段

[0010] 開示される発明の態様の一部について基本的理解を与えるために、以下に簡易な概要を提示する。本概要は、広範囲の概略ではない。特許請求の範囲に係る発明の重要な/決定的な要素を特定するまたはその範囲を明らかにすることを意図しない。その唯一の目的は、後で提示されるより詳細な説明の前置きとして、簡易な形式において概念の一部を提示することである。]
[0011] 簡単に説明すると、対象とする開示は、非同期メソッドとメソッドの呼び出しとを作成すること(generation)に関する。開示の態様に従って、ユーザは、コード注釈付け(code annotation)を介して非同期メソッドを作り出すというユーザの意図を宣言(declare)することができる。例えば、非同期バージョンのメソッドを要望していることを示す宣言型属性(declarative attribute)をメソッドに貼り付ける(attach)ことができる。別の態様に従って、非同期呼び出し(asynchronous call)の要望を示すための特別な関数を、同期メソッド呼び出しサイトにおいて指定することができる。非同期の実装または呼び出しを自動で作成(generate)するための機構が提供される。言い換えれば、開発者は、単に自分たちの意図を明らかにするだけでよく、その実装は自動で作り出される。結果的に、開発者は、非同期メソッドを容易に用いてかなり迅速なアプリケーションを作り出すことができる。]
[0012] 上述およびそれに関連する目的を達成するために、特許請求の範囲に係る発明の図示された或る態様を、以下の説明と添付図面との関連において本明細書で説明する。これらの態様は、発明を実施できるさまざまな方法を示し、そのすべては、特許請求の範囲に係る発明の範囲においてなされることを意図する。他の利点および新規の特徴は、図面と共に検討される場合に以下の詳細な説明から明らかになるだろう。]
図面の簡単な説明

[0013] 開示される発明の一態様に係る、非同期メソッド作成システムのブロック図である。
開示の一態様に係る、代表的なメソッド注釈付けコンポーネントのブロック図である。
開示される一態様に係る、代表的な非同期ライターコンポーネントのブロック図である。
開示の一態様に係る、非同期コードが中間コードレベルにおいて作成されるコード変換システムのブロック図である。
開示される一態様に係る、ソースコードレベルにおいて非同期コードを作成するコード変換システムのブロック図である。
開示の一態様に係る、実行時間に非同期コードを作り出すコード変換システムのブロック図である。
開示の一態様に係る、非同期コードを作成するコードローダーシステムのブロック図である。
開示される一態様に係る、注釈付け指定システムのブロック図である。
開示の一態様に係る、宣言型非同期メソッドの方法のフローチャート図である。
開示される一態様に係る、非同期メソッド作成の方法のフローチャート図である。
開示の一態様に係る、非同期呼び出し作成のメソッドのフローチャート図である。
開示の一態様に係る、非同期注釈付け作成メソッドのフローチャート図である。
対象となる開示の一態様に対する適切なオペレーティング環境を示す略ブロック図である。
例示的なコンピューティング環境の略ブロック図である。]
実施例

[0014] 非同期メソッドに関するシステムおよび方法を以下に詳細に説明する。非同期メソッド/関数を提供するのに必要な標準コードは、極めて難解であり、結果的に、プログラマーは、実際に必要な場合であってもこのようなメソッド/関数をほとんど用いない。その結果、多くのアプリケーションは、例えば、通信の不具合のために見込みよりもずっと遅延するまたは中断さえする。]
[0015] 非同期メソッド/関数を用いることを容易にして推進するための機構を本明細書に提供する。特に、非同期性(asynchrony)は宣言型で定義される。一例において、非同期バージョンのメソッド/関数を使用する意図を示すメソッド/関数宣言(declaration)に対して属性を指定することができる。非同期呼び出しの要望を示す同期呼び出しに対して特別な関数も指定することができる。非同期メソッドまたはメソッド呼び出しを、その後に自動で作成することができる。さらにまた、プログラマーを、応答型および/非応答型ユーザ入力に基づいて属性またはリファクタリングされたコードを作成する機構によって支援することができる。]
[0016] 対象とする開示のさまざまな態様を、添付図面を参照してこれから説明するが、全体を通じて同種の番号は同種のまたは対応する要素を示す。しかしながら、図面とそれに関連する詳細な説明は、特許請求に係る発明を開示される特定の形式に限定することを意図しないことを理解されたい。むしろ、その意図するところは、特許請求に係る発明の趣旨および範囲内において修正、同等、および代替のすべてを網羅することにある。]
[0017] 最初に図1では、特許請求の範囲に係る発明の一態様による、非同期メソッド作成システム100を示す。図のように、システム100は、スキャナ110と非同期(アシンク(async))ライター120とを含み、両方とも本明細書で定義されるコンポーネントである。スキャナコンポーネント110は、メソッド、関数および/またはその呼び出しと関連付けられて非同期をとる意図の宣言型表示のプログラムコードをスキャンする。より具体的には、スキャナコンポーネント110は、非同期属性コンポーネント112と非同期関数コンポーネント114とを含む。] 図1
[0018] 非同期属性コンポーネント112は、とりわけ“Async”などの非同期属性で注釈付けするような方法、関数の識別を容易にする。属性コンポーネント112を介したスキャナコンポーネント110は、この属性で注釈付けされたメソッドまたは関数を識別することができる。例えば、非同期メソッドの宣言(空値)は、属性“Async”を含むあるいはそれと関連付けることができる。この属性は、対応する同期メソッドの非同期バージョンを要望しているという意図を表す。その属性に加えて、スキャナコンポーネント110も、要望する非同期メソッドの実装についての詳細を指定する任意の非同期実装パターンを含む他の関連付けられた情報を識別することができる。]
[0019] 非同期関数コンポーネント114は、非同期呼び出しに変換/書き換えなければならない同期メソッドまたは関数呼び出しを具体的に識別するときにスキャンコンポーネント110を支援するための機構である。メソッド定義または宣言とは異なって、呼び出しサイトを、属性ではなく“Async()”等の関数呼び出しを特別に識別することによって識別することができる。非同期関数コンポーネント114を、それに関連する呼び出しに加え、これらの関数も識別するように構成することができる。呼び出しサイト識別関数も、実装パターンについての特別な情報で注釈付けされることも理解されたい。従って、スキャンコンポーネント110もさらに、この情報を識別することができる。]
[0020] 検出されると、スキャナコンポーネント110は、ライターコンポーネント120に送信あるいはアクセスして、1または複数のメソッド、関数、および/または呼び出しを識別することができる。後の節でさらに説明するように、実装パターンを含む他の情報もライターコンポーネント120に提供することができるが、これに限らない。]
[0021] スキャナ情報が受信または検索されると、ライターコンポーネント120は、メソッド、関数、および/または呼び出しの非同期バージョンを作成または作り出すことができる。メソッドまたは関数を、対応する同期メソッドと、入手可能な実装パターンを含む他の属性または注釈付け情報との関数として作成することができる。一実装において、ライターコンポーネント120は、識別された同期メソッドを、その実際の定義またはツリー式表記から書き換えて、適切な場所で非同期機構を導入することができる。提供される任意の実装パターンに従って、呼び出しを非同期呼び出しに書き換えることができる。当業者には周知の特定の非同期機構または非同期パターンを含むことができる。]
[0022] 図2では、特許請求の範囲に係る発明の一態様に従って、代表的なメソッド注釈付けコンポーネント200を図示する。注釈付けコンポーネント200を、図1のスキャナコンポーネント110によって探索された入力とすることができる。さらに、注釈付けコンポーネント200は、非同期属性210、同期識別子220、非同期識別子230、結果戻り識別子240、実装識別子250、および処理ステージ識別子260を含むいくつものサブコンポーネントを備える。非同期属性210は、非同期メソッドが要望されていると注釈付けする“Async”等の固有の属性または識別子に対応する。同期識別子220は、非同期メソッドを作成するのに用いられる同期メソッドを識別する。例えば、“Async(“F”)において“F”は、対応する同期メソッドを識別する。非同期識別子230は、例えば、同期名とは異なる新しく作成された非同期メソッド名を提供する。戻り結果識別子240は、呼び戻し、関数もしくは他の種類等の結果を戻すために用いる機構、または非同期計算を表す機構を指定する。実装識別子250は、要望する非同期の実装または、とりわけ、“BeginInvoke...EndInvoke”またはXMLHTTPリクエスト等の実装イディオムを指定する。処理ステージ識別子260は、どのステージまたは層で作成または変換の処理が行われるかを定義する。例えば、これは、とりわけ、中間言語(IL:intermediate language)コンパイル、ILからILへの変換、読み込み、またはJITコンパイル(JITing:just in time compiling)のソースに対応することができる。] 図1 図2
[0023] 代表的な注釈付けコンポーネント200を、実行可能なサブコンポーネントのサブセットとしてのみ提供する。もちろん、特許請求に係る発明の範囲において検討される上で、他も実行可能である。さらに、さまざまな方法において、サブコンポーネントを用いたり用いなかったり、組み合わせたり組み合わせなかったりすることができることに留意されたい。例えば、非同期属性210を同期識別子と共に用いることができるが、非同期識別子230と共に用いることはできない。あるいは、非同期属性210を非同期識別子240と組み合わせて使用することができ、そこで同期識別子がその非同期識別子から、恐らく図1のスキャナコンポーネント110またはそのサブコンポーネントによって推測される。] 図1
[0024] 特許請求に係る発明の一態様に従って、図3に、代表的な非同期ライターコンポーネント120を図示する。作成(generation)コンポーネント310は、非同期メソッドまたは呼び出しを作り出す。言い換えれば、作成コンポーネント310は、非同期機構を導入することによって、同期メソッドまたは呼び出しを非同期メソッドまたは呼び出しに書き換えることができ、少なくともその一部の機構は当業者には周知である。特にメソッドについて、その作成を、関連するまたは対応する同期メソッド定義または実装に基づいて行うことができ、明示的に指定あるいは判定または推測することができる。さらに、作成コンポーネント310は、付加的に宣言されるプロパティ、優先等の関数として非同期メソッドまたは呼び出しを作り出すことができることによって非同期性の作成を制御する。このような詳細が明示的に宣言されないところでは、作成コンポーネント310は、コンテキスト情報の関数として適切な詳細を推測することができる。] 図3
[0025] 図のように作成コンポーネント310は、戻り結果コンポーネント320と相互作用できる。このコンポーネントは、さまざまな戻り結果機構の実装を容易にする情報を作成コンポーネント310に提供する。非同期メソッドの重要な機能は、別のメソッドを呼び出して、応答を待つ間にブロックすることではなく、処理を継続しながら後で結果を受信する能力である。これらの結果を、呼び戻し、関数もしくは他の種類を含むがこれに限定されない機構または非同期計算を表す機構といった異なる戻り結果機構によって提供することができる。簡潔に言えば、呼び戻しは、被呼者によって結果が計算された後で発呼者を呼び戻すことができる関数であり、メソッドに渡される。対照的に、機能は、メソッド呼び出しの結果のプレースホルダーとして動作するオブジェクトである。発呼者が被呼者を呼び出す時、応答を待つのではなく、発呼者によって計算が継続して行われるようにできる計算の結果のプレースホルダーである機能オブジェクトが戻される。]
[0026] 作成コンポーネント310は、実装コンポーネント330によって提供される非同期メソッドを作成する情報を使用することもできる。与えられたプログラムのコンテキストに基づいて、非同期メソッドの異なる実装を要求または優先することができる。例えば、一標準的実装パターンでは、“BeginInvoke and EndInvoke”と呼ばれる。ここで、委譲が生成されて、呼び出しが開始動作と終了動作とに分かれる。これは、多くの状況において有効になり得るが、ネットワークトランザクションを処理するには最適ではない場合がある。この場合、代わりにXMLHTTPリクエストパターンを使用することができる。実装コンポーネント330は、必要に応じて具体的な実装の作成に関する情報を作成コンポーネント310に提供する。]
[0027] 注釈付けによって、実装コンポーネント330との相互作用を制御することができる。しかしながら、そのような情報が明示的に提供されないところでは、作成コンポーネント310は、デフォルト実装を用いるまたは入手可能なコンテキスト情報に基づいて適切な設定を推測することができる。例えば、関連付けられたアプリケーションまたはそれに関する部分がネットワークトランザクションを処理することが分かっているまたは推測することができる場合、作成コンポーネント310は、XMLHTTPリクエストパターンを使用して、実装コンポーネント330と相互作用して非同期メソッドの作成を支援することができる。]
[0028] 明確にする目的で、いくつかの例を、特許請求に係る発明の一態様を説明するのを支援するために提示する。これらは、単なる例示である。それらは、発明の範囲を限定するためではなく、むしろ或る態様を理解するのを支援するためのものである。第1の例は、被呼者に対するメソッド作成に関し、第2の例は、発呼者に関係する。]
[0029] 最初に、ハイレベル構造のプログラミング言語:“public Int F(string s)”で書き込まれた以下の同期メソッドについて検討する。この場合、同期関数“F”は、文字列“s”を渡して、整数を戻す。そのメソッドの非同期バージョンの使用を要望するところでは、以下のように指定することができる。

[Async(‘‘F’’)]
public extern void Foo (string s, Action callback)]
[0030] ここで、非同期属性は、“Async”であり、同期メソッド識別子は、“F”である。他の識別子は、非同期属性および同期メソッド識別子の下で非同期メソッドの署名または宣言に提供される。この場合、非同期識別子は、“Foo”であり、戻り結果機構は、呼び戻し(callback)である。言い換えれば、“Foo”と名付けられたメソッド“F”の非同期バージョンは、呼び戻し機構を使用して、結果を与えることが要望されている。動作において、発呼者は、被呼者メソッド“Foo”に、文字列と一緒に整数をとる呼び戻し関数を渡し、被呼者は、計算が完了した時にその関数を呼び出す。ここでは図示されていないが、非同期メソッドの署名は、別の呼び戻し、つまり非同期メソッドが、例えば、計算またはネットワークの不具合に起因して不具合が起きた場合に呼び出すことができる不具合の呼び戻しを含むことができるということも留意されたい。典型的には、同じスレッド内で実行していて不具合が起こった場合、例外プロセスが実行される。しかしながら、非同期コードは同じスレッド内で実行していないので、そのコードは、バブル表示された例外を認識できない。不具合の呼び戻しは、このような例外を通知することができる機構である。]
[0031] 上記の宣言された意図に応答して、以下のようにメソッド本体を自動で作成することができる。

[Async(‘‘F’’)]
public void Foo(string s, Callback callback)
{
object[] parameters = new object[] {s};
Proxy.AsyncCall(callback,
‘‘http://localhost:8081/C.agihttp://localhost:8081/C.agi’’,2,new
Guid?(this._instance),parameters);
}]
[0032] この簡易な例において、実装は、サーバ側の“F”を呼び出すが、それを非同期で行うことに留意されたい。結局、ユーザは、「何が」そして「どのように」自動で導入されるかを指定しさえすればよい。]
[0033] 第1の例において、注釈付けがメソッドに適用された。これは、同期メソッドと非同期メソッドの両方が定義される場所を制御すると見なす。従って、同期および非同期呼び出しを行う関数を提供したいライブラリライターは、この方法においてそのように行うこともできる。同期メソッドが定義されて、次に、非同期メソッドが、実装を用いずに宣言型注釈付けを用いて定義される。残念ながら、この手法は、誰かが関連コードにアクセスできない故に、非同期の方法で第三者コードを呼び出したい場合に適切でない場合がある。この場合、呼び出す側の注釈付けを使用することができる。]
[0034] 第2の例は、このような呼び出す側の注釈付けに関する。例えば、同期メソッド呼び出し“x=c.F(...)”について検討する。この呼び出しを非同期呼び出しに変換するために、 “x=Async(c.F(...))”にあるような“Async”等のメソッド/関数の識別を含むことができる。その非同期メソッドを以下のように表示することができる。

Future Async(T value) {return new
Future(value);}]
[0035] 言い換えると、それは同期して行われる。しかしながら、呼び出す側を変換して以下のように非同期で実行させることができる。

x = new Future(() => c.F(…))]
[0036] 呼び出しを行う代わりに、関数構成が挿入されて、同期呼び出しを渡す。次に、“x”がしばらく用いられない場合、このコードは、非同期で実行されて、“x”の値が要求されるまでブロックされない。ここで、“T”の代わりに“Future<T>を用いて、サンクとして動作させることができる。]
[0037] 開示の別の態様に従って、呼び出しサイト識別関数を、とりわけ実装パターンを識別する情報で注釈付けすることができることを理解されたい。例えば、

[AsyncCallSite(…implementation/optional…)]
public extern Future Async(T t)]
[0038] さまざまなプログラムレベルにおいて自動作成または変換を行うことができる。特定の実施形態によって、そのレベルを定めることができる。しかしながら、プログラマーは、以前に説明したように、プロセス識別子を提供することによって変換に使用されるレベルに影響を与えることができる。図4−7にいくつかの異なる例示的実施形態を示す。もちろん、これらの実施形態は完全ではなく、他の実施形態も実行可能である。] 図4
[0039] 図4では、特許請求に係る発明の一態様による、コード変換システム400を示す。ソースからILへのコンパイラコンポーネント410によって、1または複数のプログラミング言語(例えば、C#、VB、Java、C++)で指定されたソースコードを提供あるいは獲得することができる。その後に、ソースからILへのコンパイラ410は、そのソースコードを中間言語(IL:intermediate language)コードにコンパイルまたは変換することができる。ILからILへのコンパイラ/トランスレータコンポーネント420は、ILコードのさらなる処理を提供することができる。ここで、ILからILへのコンパイラ/トランスレータコンポーネント420は、以前に説明したように、非同期メソッド作成システム100をサブコンポーネントとして含むことができる。従って、そのような実装が無い、非同期として識別されたメソッドまたはメソッド呼び出しに実装を提供するためのコードを導入することができる。その後に、ILからターゲットへのコンパイラ/トランスレータコンポーネント430によって、そのILコードをターゲットコードにコンパイルまたはトランスレートすることができる。特定の一実装において、そのILコードを、ウェブブラウザにおいて解釈かつ実行するためのECMAスクリプト(Javaスクリプト、Jスクリプト)等の言語に変換することができる。] 図4
[0040] ILレベルにおいて非同期メソッド作成を呼び出すことは、いくつかの利点がある。第1に、開発者は、非同期のシンタックス注釈付けを、ILにコンパイルする任意のプログラミング言語に挿入することができる。これによって、多くの言語において非同期メソッドの作成が実現できる。第2に、ソースコードは、非同期性の複雑さによって難読化されない。むしろ、そのコードは、理解しやすい宣言型注釈付けのみを含むことができる。第3に、この実施形態は安定している。ソースコードを継続して生成するために使用されるようなプログラミング言語は、新しい機能を付加しながら展開するが、ILは、そうなったとしても変更がかなり少ない。さらに、ILレベル上ではすべてのツーリング(tooling)はアップストリームであるので、用いられる言語に強固に接続されるツーリング(tooling)への影響はゼロに近い。]
[0041] 図5に、ソースコードレベルにおいて非同期のコード作成/変換が行われるコード変換システム500を示す。図のように、システム500は、ソースからILへのコンパイラ410を含む。以前に説明したように、コンパイラ410は、1または複数の言語からのソースコードを中間言語コードにトランスレートする。さらに、ソースからILへのコンパイラ410は、そのコンポーネントとして非同期メソッド作成システム100を含む。コンパイラ410は、そのため、注釈付けまたは他の特別なシンタックスに従ったメソッドに対して非同期メソッドまたは呼び出しの実装を作成することができる。これらの非同期の実装を、次に、他のコードと同じ方法で中間言語にトランスレートすることができる。作成されたILを、次に、ILからILへのコンパイラ/トランスレータ420に任意に提供して、ILコードのさらなる変換を提供することができる。結果として得られたILコードは、ILからターゲットへのコンパイラ/トランスレータ430の入力として動作することができる。例えば、そのILを、ウェブブラウザにおいて実行するためのスクリプト言語にコンパイルすることができる。この実施形態の実装は、結果的に言語コンパイラごとに非同期メソッド作成コンポーネント110を作り出すことができる。] 図5
[0042] 図6では、特許請求の範囲に係る発明の一態様による、コード変換システム600を図示する。システム600は、以前に説明したように、ソースからILへのコンパイラ410とILからILへのコンパイラ/トランスレータ420とを含むことができる。さらに、システム600は、ILからターゲットへのコンパイラ/トランスレータコンポーネント430を含む。この実施形態において、非同期メソッド作成システム100を、ILからターゲットへのコンパイラトランスレータコンポーネント430のコンポーネントとすることができる。一例において、コンポーネント430は、JIT(just in time)コンパイラに対応することができる。従って、非同期の注釈付けまたは他の特別なシンタックスに従って非同期の実装を実行時に動的に導入することができる。] 図6
[0043] 特許請求の範囲に係る発明の一態様に従って、図7に、プログラムローダーシステム700を示す。ローダーシステム700は、実行可能なコンピュータプログラムを受信あるいは獲得して、それをメモリ720に読み込むローダーコンポーネント710を含む。これは、メモリ720からその後に実行されるプログラムを準備する。標準システムとは異なり、ローダーコンポーネント710は、以前に説明した非同期メソッド作成システム100をコンポーネントとして含む。メモリに読み込む前に、非同期メソッドの実装および/または呼び出しを、それぞれ、宣言型注釈付けおよび/または呼び出しサイト識別関数に従って、導入することができる。] 図7
[0044] 特許請求の範囲に係る発明の一態様に従って、図8では、注釈付け指定システム800を提供する。システム800は、ユーザインタフェースコンポーネント810と注釈付け作成コンポーネント820とを含む。ユーザインタフェースコンポーネント810は、システム800とのユーザ相互作用を容易にする。より詳細には、非同期メソッドおよび/または呼び出しを宣言型で識別することに関する情報を、ユーザから利用するおよび/または獲得することができる。本開示の特許請求の範囲の態様に従って、注釈付け作成コンポーネント820は、非同期メソッドおよび/または呼び出しの作成のために必要な属性または注釈付けを作り出す。注釈付け作成コンポーネントは、従って、コードリファクタリングの関数機能を提供する。] 図8
[0045] 注釈付け作成コンポーネント820は、属性または注釈付けの作成についての情報を受動的または能動的に獲得することができる。例えば、ユーザインタフェースコンポーネント810は、単に注釈付け作成コンポーネント820から情報を受信したり渡したりするための機構として動作することができる。あるいは、注釈付け作成コンポーネント820は、ユーザからユーザインタフェースコンポーネント810を介した情報を能動的に呼ぶことができる。例を挙げると、注釈付け作成コンポーネント820は、同期メソッド名、非同期メソッド名、戻り結果機構、および/または非同期実装イディオム等の情報を要求するウィザードとして動作することができる。一実施形態において、システム800は、1または複数の開発ツールとするまたはその一部を成すことができる。結果として、非同期性をとる宣言型は、直接の仕様よりもさらに容易に行うことができる。]
[0046] いくつかのコンポーネント間の相互作用に対して上述のシステム、アーキテクチャ等を説明した。そのようなシステムおよびコンポーネントは、それらに指定されたコンポーネントまたはサブコンポーネント、その指定されたコンポーネントまたはサブコンポーネントの一部、および/または付加的なコンポーネントを含むことができることを理解されたい。サブコンポーネントも、親コンポーネント内に含まれるのではなく、他のコンポーネントに通信接続されるコンポーネントとして実装されることもあり得る。さらにまた、1または複数のコンポーネントおよび/またはサブコンポーネントを組み合わせて単一のコンポーネントにして、統合された関数機能を提供できる。プッシュおよび/またはプル方式のいずれかに従って、システム、コンポーネントおよび/またはサブコンポーネント間の通信を達成することができる。コンポーネントは、簡潔にするために本明細書で具体的に説明されていないが、当業者には周知である1または複数の他のコンポーネントと相互作用することもできる。]
[0047] さらに、当然のことながら、上記に開示されたシステムおよび以下のメソッドのさまざまな部分は、人工知能、機械学習、またはコンポーネント、サブコンポーネント、プロセス、手段、方法論に基づいた知識またはルール、または機構(例えば、サポートベクターマシン、ニューラルネットワーク、エキスパートシステム、ベイジアン信念ネットワーク、ファジー理論、データ融合エンジン、分類子)を含むまたはそれから構成されることができる。このようなコンポーネントは、とりわけ、それによって行われる或る機構またはプロセスを自動化して、そのシステムおよびメソッドを効率的で知的にすることに加え、より適用できるようにすることもできる。例を挙げると、非同期コンポーネント120は、このような機構を使用して、明示的に提供されない属性情報を推測あるいは判定することができるが、これに限らない。例えば、同期名ではなく非同期メソッドの署名を用いて非同期属性が指定されるところでは、非同期および同期メソッド名は同じであると推測することができる。]
[0048] 上述した例示的システムに鑑みて、開示された発明に従って実装できる方法は、図9−11のフローチャートを参照してより理解されるであろう。説明を簡潔にする目的で方法を一連のブロックとして説明しているが、当然のことながら、特許請求の範囲に係る発明は、或るブロックが本明細書で図示されるものとは異なる順序および/または他のブロックと同時に起こり得るように、一連のブロックの順序によって限定されない。さらに、図示されたブロックが、以下に説明される方法を実装するのにすべて必要ではない。] 図9
[0049] 特許請求の範囲に係る発明の一態様に従って、図9では、非同期メソッド宣言型900の方法を図示する。参照数字910において、同期メソッド(または関数)が識別される。識別されたメソッドは、非同期通信を要望しているメソッドに対応する。参照数字920において、非同期の意図は、非同期バージョンの要望を示す識別されたメソッドと関連して宣言によって識別される。これを、特定のシンタックスまたは注釈付けをメソッドまたはメソッド宣言に提供することによって達成することができる。例えば、“Async”属性を同期メソッド定義あるいは非同期メソッドの空宣言に貼り付けることができる。単独の属性またはそれと関連付けられた他の情報との組み合わせにおける属性は、とりわけ、非同期メソッド名、戻り結果機構、および実装イディオム等の非同期メソッドの作成に影響を与えることができる。メソッド呼び出しを、属性を使用するのではなく、その呼び出しが同期ではなく非同期で行われるという意図を示す“Async(...)”等の特別な関数呼び出しが、同期呼び出しサイトにおいて提示される場合を除く同様の方法で宣言して作成することができることを理解されたい。] 図9
[0050] 対象とする特許請求の範囲の態様に従って、図10に、非同期メソッド作成1000の方法を示す。参照数字1010において、非同期メソッドの属性が識別される。例えば、プログラムをスキャンしてメソッド定義または宣言に貼り付ける“Async”と呼ばれる属性等を探すことができる。数字1020において、関連する同期メソッド/関数が識別される。非同期属性が同期メソッド定義に直接貼り付けられるところでは、その同期メソッドを容易に識別することができる。別の実装において、属性と関連付けられるさらなる情報を検索してそのようなメソッドを識別することができる。例えば、“Async“F”は、“F”と呼ばれる同期メソッドの非同期バージョンが要望されていることを示すことができる。同期メソッド名が明示的に識別されない場合、例えば、とりわけ、非同期メソッドの署名に基づいてそれを推測することができる。参照数字1030において、関連する同期メソッドに加えて、非同期メソッドコードが、非同期属性および他の関連する情報の関数として作り出される。言い換えれば、同期メソッドは、注釈付けに従った非同期機構の導入を介して非同期メソッドに変換される。] 図10
[0051] 図11では、フローチャート図に、非同期呼び出し作成の方法1100を示す。参照数字1110において、特別な関数が同期呼び出しサイトにおいて識別される。例えば、関数を、“x=Async(c.F(...))”にあるような“Async()”とすることができる。その関数の種類は、“Future<T>Async<T>(T t)”またはその他の非同期計算の表記である。参照数字1120において、呼び出しは、非同期呼び出しとして書き換えられる。言い換えれば、非同期呼び出しが作成されて導入される。例えば、“x=Async(c.F(...))”を、“x=new Future<T>(()=>c,F(...))”として書き換えることができる。] 図11
[0052] 図12では、特許請求の範囲に係る発明の一態様による、非同期注釈付け作成の方法1200を示すフローチャート図を提供する。一実施形態に従って、方法1200を、統合開発環境(IDE:integrated development environment)と関連付けられた1または複数の開発ツールによって行うことができる。参照数字1210において、非同期性についての情報は、ユーザから要求される。例えば、そのような要求は、対応する同期メソッドの識別および、とりわけ、要望する実装についての詳細を含むことができる。参照数字1220において、情報はユーザから受信される。この情報は、動作1210または非応答型の情報によって要求されたものとすることができる。数字1230において、受信された情報に従って、属性が作成される。属性は、実装についての優先を含むさまざまな情報を含むことができる。しかしながら、最も単純な場合、それは、“Async”等の単純な識別子とすることができる。参照数字1240において、プログラムコードが属性および関連する任意の情報/パラメータで注釈付けされる。] 図12
[0053] 概して、方法1200は、コードの注釈付け、より詳細には非同期メソッド作成/変換を容易にするのに役立つ。例を挙げると、IDEにおいて、ユーザは、メソッド上で右クリックしてそのリファクタリングを開始する、またはそのメソッドの非同期バージョンを作成することができる。IDEは、次に、非同期属性をそのメソッドに貼り付けることができる。さらにまた、右クリックすることによって、ユーザに質問するダイアログボックス、例えば、「非同期バージョンを異なる名前にしたいですか?それとも同じ名前にしたいですか?」、「呼び戻し機構を用いたいですか?それとも呼び戻し機能を用いたいですか?」、「実装を明示するためにどんな設計パターンまたはイディオムを用いたいですか?」等が開くようにできる。次に、ユーザに提供するそのような情報をすべて捕える注釈付けを作り出すことができる。それ以外では、デフォルト設定またはコンテキスト情報の関数として推測される最適パラメータを用いることができる。]
[0054] 用語「メソッド」と「関数」とは、本明細書ではほぼ同じ意味で使用される。「関数」は、標準的には、動作を行う一つのコードを示す。一方、「メソッド」は、オブジェクトに対する関数である。しかしながら、本明細書に限らず実際において、その用語は、オブジェクトを伴うか否かにかかわらず、具体的なルーチンまたは動作を指定する一つのコードを単に示すためにほぼ同じ意味で用いられる。]
[0055] 単語「例示的な」またはそのさまざまな形式は、本明細書では、例、実例、または図解としての役割をする意味で用いられる。本明細書で「例示的な」として説明される任意の態様または設計は、他の態様または設計に対して必ずしも優先されるまたは有利であると解釈されるものではない。さらに、例は、明確さおよび理解を唯一の目的として提供され、特許請求の範囲に係る発明または本開示の関連部分がいかなる方法によっても限定または制限されることを意図しない。さまざまな範囲の付加的または代替可能な例を多く提示することも可能であったが、簡潔にする目的で省略されていることを理解されたい。]
[0056] 本明細書で用いられるように、用語「推測」または「推測する」は、一般的に、イベントおよび/またはデータを介して捕えられるような観察のセットからシステム、環境、および/またはユーザの状態について推論または推測するプロセスを示す。推測を用いて、具体的なコンテキストまたは動作を識別することができる、または例えば、状態に対する確立分布を作成することができる。推測は、確立的、つまり、データおよびイベントの検討に基づく興味の状態に対する確立分布の計算とすることができる。推測は、イベントおよび/またはデータのセットからより高レベルのイベントを構成するために用いられる技術を示すこともできる。イベントが一時的に近接して相関するか否かにかかわらず、およびイベントおよびデータが1または複数のイベントおよびデータソースに由来するか否かにかかわらず、そのような推測は、結果として観察されたイベントおよび/または格納されたイベントデータのセットから新しいイベントまたは動作を構築する。対象とする技術革新に関連して、さまざまな分類方式および/またはシステム(例えば、サポートベクターマシン、ニューラルネットワーク、エキスパートシステム、ベイジアン信念ネットワーク、ファジー理論、データ融合エンジン)を自動および/または推測動作することに関連して用いることができる。]
[0057] さらに、ソフトウェア、ファームウェア、ハードウェアを作り出すための標準のプログラミングおよび/またはエンジニアリング技術、またはコンピュータを制御して開示された技術革新を実装するその任意の組み合わせを用いて、対象とする技術革新のすべてまたは一部をメソッド、装置、または製品として実装できる。本明細書で用いられる用語「製品」は、任意のコンピュータ可読デバイスまたは媒体からアクセスできるコンピュータプログラムを範囲とすることを意図する。例えば、コンピュータ可読媒体は、磁気ストレージデバイス(例えば、ハードディスク、フロッピーディスク、磁気帯)、光ディスク(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD))、スマートカード、およびフラッシュメモリデバイス(例えば、カード、スティック、キードライブ)を含むことができるが、これに限らない。さらに、搬送波を用いて、電子メールを送受信する時またはインターネットもしくはローカルエリアネットワーク(LAN)等のネットワークにアクセスする時に用いられるようなコンピュータ可読電子データを運ぶことができることを理解されたい。もちろん、特許請求の範囲に係る発明の範囲または趣旨から逸脱せずに、この構成に対して多くの変更が行われてもよいことを当業者は理解されたい。]
[0058] 開示された発明のさまざまな態様にコンテキストを提供するために、以下の考察に加えて図13および14も、開示された発明のさまざまな態様を実装できる適切な環境の簡潔で、一般的な説明を提供することを意図する。1または複数のコンピュータ上で実行するプログラムのコンピュータ実行可能命令の一般的なコンテキストにおいて発明を上記で説明しているが、対象とする技術革新も他のプログラムモジュールとの組み合わせにおいて実装できることを当業者は理解されたい。一般的に、プログラムモジュールは、特定のタスクを行うおよび/または特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造等を含む。さらに、システム/方法を、パーソナルコンピュータ、ハンドヘルドコンピューティングデバイス(例えば、パーソナルデジタルアシスタント(PDA)、電話、時計)、マイクロプロセッサベースまたはプログラマブル家庭用もしくは業務用電化製品等に加えて、単一プロセッサ、マルチプロセッサもしくはマルチコアプロセッサコンピュータシステム、ミニコンピューティングデバイス、メインフレームコンピュータを含む他のコンピュータシステム構成に実施できることを当業者は理解されたい。図示された態様は、タスクが、通信ネットワークを通じて接続されるリモート処理デバイスによって行われる分散コンピューティング環境において実施することもできる。しかしながら、すべてではないが、一部において、特許請求の範囲に係る発明の諸態様をスタンドアロンのコンピュータ上で実施することができる。分散コンピューティング環境において、プログラムモジュールを、ローカルメモリストレージデバイスとリモートメモリストレージデバイスとの両方に置くことができる。] 図13
[0059] 図13の参照では、本明細書で開示されるさまざまな態様を実装するための例示的環境1310は、コンピュータ1312(例えば、デスクトップ、ラップトップ、サーバ、ハンドヘルド、プログラマブル家庭用または業務用電化製品)を含む。コンピュータ1312は、処理ユニット1314、システムメモリ1316、およびシステムバス1318を含む。システムバス1318は、システムメモリ1316を含むシステムコンポーネントを処理ユニット1314に接続するが、これに限らない。処理ユニット1314は、入手可能なさまざまなマイクロプロセッサのいずれにもすることができる。二重プロセッサ、マルチコアおよび他のマルチプロセッサアーキテクチャを、処理ユニット1314として用いることができることを理解されたい。] 図13
[0060] システムメモリ1316は、揮発性および不揮発性メモリを含む。コンピュータ1312において、起動時等の、要素間で情報を転送するための基本ルーチンを含む基本入力/出力システム(BIOS)は、不揮発性メモリに格納される。実例として、不揮発性メモリは、リードオンリーメモリ(ROM)を含むことができるが、これに限らない。揮発性メモリは、処理を容易にする外部キャッシュメモリとして動作することができるランダムアクセスメモリ(RAM)を含む。]
[0061] コンピュータ1312は、リムーバブル/ノンリムーバブル、揮発性/不揮発性コンピュータストレージ媒体も含む。図13に、例えば、マスストレージ1324を図示する。マスストレージ1324は、磁気または光ディスクドライブ、フロッピーディスクドライブ、フラッシュメモリ、またはメモリスティック等のデバイスを含むが、これに限らない。さらに、マスストレージ1324は、ストレージ媒体を単独でまたは他のストレージ媒体と組み合わせにおいて含むことができる。] 図13
[0062] 図13に、ユーザおよび/または他のコンポーネントと、適切なオペレーティング環境310において説明された基本コンピュータリソースとの間の中間として動作するソフトウェアアプリケーション1328を提供する。そのようなソフトウェアアプリケーション1328は、システムまたはアプリケーションソフトウェアの1つまたは両方を含む。システムソフトウェアは、コンピュータシステム1312のリソースを制御して割り当てるマスストレージ1324上に格納することができるオペレーティングシステムを含むことができる。アプリケーションソフトウェアは、システムメモリ1316またはマスストレージ1324のいずれかまたは両方に格納されるプログラムモジュールおよびデータを介したシステムソフトウェアを利用することによって、リソースを管理をする。] 図13
[0063] コンピュータ1312は、バス1318に通信接続されてコンピュータ1312との相互作用を容易にする、1または複数のインタフェースコンポーネント1326も含む。例を挙げると、インタフェースコンポーネント1326は、ポート(例えば、シリアル、パラレル、PCMCIA、USB、ファイアワイア)またはインタフェースカード(例えば、音声、ビデオ、ネットワーク)等とすることができる。インタフェースコンポーネント1326は、(有線または無線で)入力を受信して出力を供給することができる。例えば、入力を、マウス、トラックボール、スタイラス、タッチパッド、キーボード、マイクロフォン、ジョイスティック、ゲームパッド、パラボラアンテナ、スキャナ、カメラ、その他のコンピュータ等のポインティングデバイスを含むデバイスから受信することができるが、これに限らない。コンピュータ1312によって、出力を、インタフェースコンポーネント1326を介して出力デバイスに供給することもできる。出力デバイスは、とりわけ、ディスプレイ(例えば、CRT、LCD、プラズマ)、スピーカ、プリンタ、およびその他のコンピュータを含むことができる。]
[0064] 図14は、対象とする技術革新を相互作用することができる例示的なコンピューティング環境1400の略ブロック図である。システム1400は、1または複数のクライアント1410を含む。クライアント1410は、ハードウェアおよび/またはソフトウェア(例えば、スレッド、プロセス、コンピューティングデバイス)とすることができる。システム1400は、1または複数のサーバ1430も含む。従って、システム1400は、他のモデルの中でもとりわけ、二層構造クライアントサーバモデルまたは多層構造モデル(例えば、クライアント、中間層サーバ、データサーバ)に対応することができる。サーバ1430は、ハードウェアおよび/またはソフトウェア(例えば、スレッド、プロセス、コンピューティングデバイス)とすることもできる。サーバ1430は、対象とする技術革新の態様を用いることによって、例えば、スレッドを格納して変換を行うことができる。クライアント1410とサーバ1430との間の1つの実行可能な通信を、2または3以上のコンピュータプロセス間で送信されるデータパケットの形式にできる。] 図14
[0065] システム1400は、クライアント1410とサーバ1430との間の通信を容易にするために用いることができる通信フレームネットワーク1450を含む。クライアント1410は、クライアント1410にローカルな情報を格納するために用いることができる1または複数のクライアントデータストア1460に動作的に接続される。同様に、サーバ1430は、サーバ1430にローカルな情報を格納するために用いることができる1または複数のサーバデータストア1440に動作的に接続される。]
[0066] クライアント/サーバ相互作用を、特許請求に係る発明のさまざまな態様に対して使用することができる。例を挙げると、通信フレームネットワーク1450を通じて、メソッド呼び出しを、クライアント1410とサーバ1430との間で行うことができるが、これに限らない。さらに、開示された態様を、1または複数のクライアント1410およびサーバ1430上で実行するためにアプリケーションコードが分割または分散される層分割を、クライアント1410またはサーバ1430上で行う具体的なコンパイラまたはトランスレータに組み込むことができる。これによって、開発者が、オブジェクトアイデンティティなどの本質的なプログラムの語義を保存する一方で、強力な多層コードを簡単に書き込むことができる。]
[0067] 上述したものには、特許請求の範囲に係る発明の諸態様の例を含む。もちろん、特許請求の範囲に係る発明を説明する目的でコンポーネントまたは方法の考えられるすべての組み合わせを説明することは不可能であるが、開示された発明のさらに多くの組み合わせおよび置換が実行可能であることを当業者は理解されたい。従って、開示された発明は、添付の特許請求の範囲の趣旨および範囲内において、そのような代替、変更、および変形のすべてを受け入れることを意図する。さらに、用語「含む」、「包含する」、「有する(has)」、「有している(having)」またはその変形は、詳細な説明または特許請求範囲のいずれかにおいて用いられる範囲において、そのような用語は、「備える」が用いられた場合、特許請求において変更できる単語として解釈されるので、用語「備える」と同様の方法で包括されることを意図する。]
权利要求:

請求項1
非同期メソッドおよび/または呼び出し作成システムであって、非同期の意図の宣言を含むメソッドおよび/またはメソッド呼び出しを置くスキャナコンポーネントと、前記置かれたメソッドおよび/または呼び出しの非同期バージョンを作成するライターコンポーネントとを備えることを特徴とするシステム。
請求項2
前記宣言は、非同期メソッドの空宣言に貼り付けられる非同期属性であることを特徴とする請求項1に記載のシステム。
請求項3
前記属性および/または宣言は、前記ライターによって用いられる要望された非同期実装パターンを識別することを特徴とする請求項2に記載のシステム。
請求項4
前記ライターコンポーネントは、対応する同期メソッド定義の関数として非同期メソッドの実装を作成することを特徴とする請求項2に記載のシステム。
請求項5
前記属性および/または貼り付けられた宣言は、前記同期メソッド定義を識別することを特徴とする請求項4に記載のシステム。
請求項6
前記ライターコンポーネントは、前記属性および/または前記非同期メソッド宣言から前記対応するメソッド定義を推測することを特徴とする請求項4に記載のシステム。
請求項7
前記宣言は、同期呼び出しサイトにおける関数であることを特徴とする請求項1に記載のシステム。
請求項8
前記コンポーネントは、言語トランスレータを仲介するための中間言語の部分を形成することを特徴とする請求項1に記載のシステム。
請求項9
前記コンポーネントは、ソースコードから中間言語へのコンパイラ、中間言語からマシン語へのトランスレータ、またはプログラムローダーの部分を形成することを特徴とする請求項1に記載のシステム。
請求項10
ユーザから情報を獲得するユーザインタフェースコンポーネントと、前記獲得された情報の関数として属性および関連するパラメータを作成する作成コンポーネントとをさらに備えることを特徴とする請求項1に記載のシステム。
請求項11
非同期メソッドを作成する方法であって、非同期メソッド宣言に貼り付けられた注釈付けを識別するステップと、前記注釈付けと対応する同期メソッドとの関数として非同期メソッドの実装を自動で作り出すステップとを備えることを特徴とする方法。
請求項12
前記注釈付けから前記対応する同期メソッドを識別するステップをさらに備えることを特徴とする請求項11に記載の方法。
請求項13
前記非同期メソッド宣言から前記対応する同期メソッドを推測するステップをさらに備えることを特徴とする請求項11に記載の方法。
請求項14
前記注釈付けによって指定された実装パターンに従って前記非同期メソッドを作り出すステップを備えることを特徴とする請求項11に記載の方法。
請求項15
前記パターンに従ってコンテキストの関数として実装パターンを推測するステップと前期非同期メソッドを作り出すステップとを備えることを特徴とする請求項11に記載の方法。
請求項16
前記注釈付けによって決められた処理ステージにおいて前記非同期メソッドを作り出すステップを備えることを特徴とする請求項11に記載の方法。
請求項17
中間言語コードによって前記注釈付けを識別するステップと中間言語コードによって前記メソッドを作り出すステップとを備えることを特徴とする請求項11に記載の方法。
請求項18
コンピュータプログラムが格納されているコンピュータ可読媒体であって、同期メソッドと、前記メソッドまたはその呼び出しの非同期バージョンが要望されていることを示す識別子とを備えることを特徴とするコンピュータ可読媒体。
請求項19
前記識別子は、同期メソッド定義または非同期メソッド宣言に貼り付けられた属性であることを特徴とする請求項18に記載のコンピュータ可読媒体。
請求項20
前記識別子は、同期メソッド呼び出しサイトに置かれた特別な関数であることを特徴とする請求項18に記載のコンピュータ可読媒体。
类似技术:
公开号 | 公开日 | 专利标题
US10546035B2|2020-01-28|System and method for data-driven web page navigation control
El-Kassas et al.2017|Taxonomy of cross-platform mobile applications development approaches
US9811360B2|2017-11-07|Dynamic determination of application server runtime classloading
Würthinger et al.2013|One VM to rule them all
US9286042B2|2016-03-15|Control flow graph application configuration
Thai et al.2003|. NET framework essentials
US10528363B2|2020-01-07|Conservative class preloading for real time java execution
Bracha et al.2010|Modules as objects in newspeak
Hicks et al.2005|Dynamic software updating
US10402208B2|2019-09-03|Adaptive portable libraries
Würthinger et al.2012|Self-optimizing AST interpreters
JP2015084251A|2015-04-30|ソフトウェア・アプリケーションの性能向上
US8132150B2|2012-03-06|Automatic customization of classes
US8291375B2|2012-10-16|Attribute-based component programming system and methodology for object-oriented languages
US9250938B2|2016-02-02|Caching runtime generated code
ES2674140T3|2018-06-27|Creación de símbolos inferidos a partir del uso de código
US6836883B1|2004-12-28|Method and system for compiling multiple languages
JP5436696B2|2014-03-05|メタデータ抽出による動的言語の実行
JP2015531925A|2015-11-05|ウェブブラウザにおけるスクリプトの事前処理
US8813049B2|2014-08-19|Type inference of partially-specified parameterized types
JP2014529832A|2014-11-13|変換コンテンツ・アウェア・データー・ソース管理
Geoffray et al.2010|VMKit: a substrate for managed runtime environments
Auerbach et al.2012|A compiler and runtime for heterogeneous computing
US8108848B2|2012-01-31|Automatic and transparent memoization
US8209674B2|2012-06-26|Tier splitting support for distributed execution environments
同族专利:
公开号 | 公开日
WO2009111118A1|2009-09-11|
US20090228904A1|2009-09-10|
CN101965561A|2011-02-02|
EP2257877A4|2013-05-01|
EP2257877A1|2010-12-08|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题
法律状态:
2011-12-14| A621| Written request for application examination|Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20111213 |
2012-11-07| A131| Notification of reasons for refusal|Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20121106 |
2013-04-10| A02| Decision of refusal|Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20130409 |
优先权:
申请号 | 申请日 | 专利标题
[返回顶部]